package com.ftg.learn.chapter02.ee.mapper;

import com.ftg.learn.chapter02.ee.domain.SysDept;
import com.ftg.learn.chapter02.ee.domain.SysUser;
import com.ftg.learn.chapter02.ee.vo.SysUserDeptVo;
import org.apache.ibatis.annotations.*;

import java.util.List;
import java.util.Map;

/**
 * 映射文件
 *
 * @author kangjx
 * @version 1.0
 * @date 2023/12/27 下午2:26
 */
public interface SysDeptMapper {

    /**
     * 根据部门名称查询部门数量
     *
     * @param dname 部门名称
     * @return int 个数
     */
    @Select("select count(id) from sys_dept where dname = #{dname}")
    int getCountByDname(@Param("dname") String dname);

    /**
     * 保存部门
     *
     * @param dept 部门
     * @return 个数
     */
    @Insert("insert into sys_dept(dname) values(#{dname})")
    int saveDept(SysDept dept);

    /**
     * 查询所有部门和用户
     *
     * @return List<SysUserDeptVo>
     */
    List<SysUserDeptVo> showDeptUser();

    @Update("update sys_dept set statue = 1 where id = #{id}")
    int logicDeleteById(@Param("id") Integer id);

    /**
     * 查询所有部门
     * @param dname 部门名称
     * @param statue 状态
     * @param start 开始
     * @param pageSize 每页大小
     * @return
     */
    List<SysDept> list(
            @Param("dname") String dname,
            @Param("statue") Integer statue,
            @Param("start") Long start,
            @Param("pageSize") Long pageSize);


    Long countByNameAndStatue(
            @Param("dname") String dname,
            @Param("statue") Integer statue);

//
//    /**
//     * 查询所有部门
//     * @return
//     */
//    @Select("select * from sys_dept")
//    @Results({
//        @Result(column = "id",property = "id"),
//        @Result(column = "dname",property = "dname"),
//            //column 列，用于查询一对多里面的多的主键
//            //property sysdept里面的一个集合
//            //javaType 数据类型
//            //many 一对多查询
//        @Result(column = "id",property = "list",javaType = List.class,many = @Many(select = "com.ftg.learn.chapter02.ee.mapper.SysDeptMapper.showUserByDeptno"))
//    })
//    List<SysDept> showDept();
//
//
//
//    List<SysUser> showUserByDeptno(@Param("deptno") int deptno);

}
